/*
 * 文件名：Handler.java
 * 版权：亚信联创版权所有
 * 描述：TODO
 * 修改人：yuanze
 * 修改时间：2014年12月1日
 * 修改内容：TODO
 */
package com.ailk.bigdata.etl.realstream.server.service;

import io.netty.buffer.ByteBuf;

import java.nio.charset.Charset;
import java.text.SimpleDateFormat;

/**
 * @description 责任链Handler
 * @author [yuanze]
 * @version [版本号,2014年12月1日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public abstract class FormatHandler
{
	protected static Charset utf8 = Charset.forName("utf-8");

	protected int length;

	protected int ipVer;

	protected String separator;

	protected String dateFormat;

	protected SimpleDateFormat simpleDateFormat = null;

	/**
	 * 持有后继的责任对象
	 */
	protected FormatHandler successor;

	/**
	 * 示意处理请求的方法，虽然这个示意方法是没有传入参数的 但实际是可以传入参数的，根据具体需要来选择是否传递参数
	 */
	public abstract void handleRequest(ByteBuf byteBuf, StringBuilder content);

	/**
	 * 取值方法
	 */
	public FormatHandler getSuccessor()
	{
		return successor;
	}

	/**
	 * 赋值方法，设置后继的责任对象
	 */
	public void setSuccessor(FormatHandler successor)
	{
		this.successor = successor;
	}

	public int getLength()
	{
		return length;
	}

	public void setLength(int length)
	{
		this.length = length;
	}

	public String getSeparator()
	{
		return separator;
	}

	public void setSeparator(String separator)
	{
		this.separator = separator;
	}

	public String getDateFormat()
	{
		return dateFormat;
	}

	public void setDateFormat(String dateFormat)
	{
		this.dateFormat = dateFormat;
		simpleDateFormat = new SimpleDateFormat(dateFormat);
	}

	public int getIpVer()
	{
		return ipVer;
	}

	public void setIpVer(int ipVer)
	{
		this.ipVer = ipVer;
	}

	/**
	 * @description TODO
	 * @param bytes
	 * @return
	 */
	public static String toHexString(byte[] bytes)
	{
		StringBuffer buffer = new StringBuffer(bytes.length);
		for (int i = 0; i < bytes.length; i++)
		{
			buffer.append(toHex(bytes[i]));
			buffer.append("");
		}
		return buffer.toString();
	}

	/**
	 * @description TODO
	 * @param b
	 * @return
	 */
	public static String toHex(byte b)
	{
		String hex = Integer.toHexString(b & 0xFF);
		if (hex.length() == 1)
		{
			hex = '0' + hex;
		}
		return new String(hex);
	}
}
